package util;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {
	
	private static final SessionFactory sessionFactory = buildSessionFactory();
	
/*	private static final SessionFactory sessionFactory;
    static {
		try {
	        // Carrrega as configurações (tando do arquivo xml quanto as anotações feitas nas classes Entity) 
	        //  e cria um objeto Factory para manipular sessão
	        
			sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
			
		} catch (Throwable ex) {
			// Log exception!
			throw new ExceptionInInitializerError(ex);
		}
	}
*/
	
    private static SessionFactory buildSessionFactory() {
    	try {
//			Configuration cfg = new Configuration();
//			cfg.configure("hibernate.cfg.xml");
//			return cfg.buildSessionFactory();
			return new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
		} catch (Throwable e) {
			System.out.println("Falha na inicialização do SessionFactory. Erro :" + e);
			throw new ExceptionInInitializerError(e);
		}
    }
    
	/**
	 * obtem uma sessão, o método requisita uma sessão ao manager session
	 * se uma sessão não existir ele cria, e guarda a referencia para que
	 * cada nova requisição possa receber a mesma sessão
	 */
    public static Session getSession() throws HibernateException {
    	return sessionFactory.getCurrentSession();
    }
    
    public static SessionFactory getSessionFactory() throws HibernateException {
    	return sessionFactory;
    }
}
